package com.gitee.zhziyun.cnfsystem;
// 导入Swing和AWT包

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Objects;

public class shit {

    public static void main(String[] args) {

        // 创建主窗口（JFrame）
        JFrame frame = new JFrame();
        // 设置窗口标题
        frame.setTitle("用户列表");
        // 设置窗口大小（宽度300像素，高度400像素）
        frame.setSize(300, 400);
        // 设置关闭窗口时退出程序
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


        // 创建主面板（JPanel）
        JPanel mainPanel = new JPanel();
        // 设置面板布局为垂直排列（每行一个组件）
        mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));

        // 添加滚动条支持
        JScrollPane scrollPane = new JScrollPane(mainPanel);
        // 将滚动条面板添加到窗口中央
        frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

        // 示例用户数据（实际中可能从数据库或文件读取）
        String[] userNames = {"张三", "李四", "王五"};
        // 示例头像路径（需要替换为实际图片路径）
        String[] avatarPaths = {"/avatar/blue.jpg", "/avatar/blue.jpg", "/avatar/blue.jpg"};

        // 为每个用户创建一行
        for (int i = 0; i < userNames.length; i++) {
            // 创建单个用户行的面板
            JPanel userRow = createUserRow(userNames[i], avatarPaths[i]);
            // 在行面板中存储用户数据（用于点击时识别）
            userRow.putClientProperty("USER_NAME", userNames[i]);
            // 将行面板添加到主面板
            mainPanel.add(userRow);
        }

        // 显示窗口（放在最后确保所有组件已添加）
        frame.setVisible(true);
    }

    // 创建单个用户行的方法
    private static JPanel createUserRow(String userName, String avatarPath) {
        // 创建行面板（使用JPanel）
        JPanel rowPanel = new JPanel();
        // 设置行面板为流式布局（从左到右排列组件）
        rowPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
        // 设置行面板背景色为白色
        rowPanel.setBackground(Color.WHITE);
        // 设置行面板边框（灰色线条边框，上下左右各有5像素空白）
        rowPanel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.LIGHT_GRAY));

        // 尝试加载头像图片
        ImageIcon avatarIcon = new ImageIcon(Objects.requireNonNull(
                shit.class.getResource(avatarPath)));
        try {
            // 创建图片图标

            // 缩放图片到40x40像素
            Image scaledImage = avatarIcon.getImage().getScaledInstance(100, 100, Image.SCALE_SMOOTH);
            // 使用缩放后的图片创建新图标
            avatarIcon = new ImageIcon(scaledImage);


        } catch (Exception e) {
            // 如果图片加载失败，使用默认图标
            avatarIcon = new ImageIcon(); // 创建空图标
            System.err.println("无法加载头像: " + avatarPath);
        }

        // 创建头像标签
        JLabel avatarLabel = new JLabel();
        // 设置头像标签的图标
        avatarLabel.setIcon(avatarIcon);
        // 设置头像标签与右边组件的间距（10像素）
        avatarLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));

        // 创建用户名标签
        JLabel nameLabel = new JLabel(userName);
        // 设置用户名标签字体（字体：宋体，样式：普通，大小：14）
        nameLabel.setFont(new Font("宋体", Font.PLAIN, 14));

        // 将头像标签添加到行面板
        rowPanel.add(avatarLabel);
        // 将用户名标签添加到行面板
        rowPanel.add(nameLabel);

        // 为整个行面板添加鼠标点击监听器
        rowPanel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // 当鼠标点击行面板时触发

                // 从行面板获取存储的用户名
                String clickedUserName = (String) rowPanel.getClientProperty("USER_NAME");

                // 显示点击了哪个用户的消息对话框
                JOptionPane.showMessageDialog(
                        rowPanel, // 父组件（显示在哪个组件上方）
                        "你点击了用户: " + clickedUserName, // 消息内容
                        "用户选择", // 对话框标题
                        JOptionPane.INFORMATION_MESSAGE // 消息类型（信息图标）
                );
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                // 当鼠标进入行面板区域时触发
                // 设置行面板背景色为浅蓝色（悬停效果）
                rowPanel.setBackground(new Color(230, 240, 255));
            }

            @Override
            public void mouseExited(MouseEvent e) {
                // 当鼠标离开行面板区域时触发
                // 恢复行面板背景色为白色
                rowPanel.setBackground(Color.WHITE);
            }
        });

        // 返回创建好的行面板
        return rowPanel;
    }
}